<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script>
    // 下面代码中如果使用 var ，最后输出的是 10
    // var a = [];
    // for (var i = 0; i < 10; i++) {
    // a[i] = function () {
    //     console.log(i);
    // };
    // }
    // a[6]();  // 10

    // 如果使用 let 声明的变量仅在块级作用域内有效，最后输出的是 6
    // var a = [];
    // for (let i = 0; i < 10; i++) {
    // a[i] = function () {
    //     console.log(i);
    // };
    // }
    // a[6](); // 6

    // for (let i = 0; i < 3; i++) {
    //     let i = 'abc';
    //     console.log(i);
    // }
    // 结果：abc abc abc
    // 上面的代码执行输出3次abc，标明函数内部的变量i与循环变量i不在同一个作用域，有各自单独的作用域
    
    // let 不存在变量提升
    // console.log(foo);  // undefined
    // var foo = 2;

    // console.log(bar);  // Uncaught ReferenceError: Cannot access 'bar' before initialization
    // let bar = 2;

    // 存在暂时性死区
    // if (true) {
    //     // tmp = 'abc';
    //     // console.log(tmp);

    //     let tmp;
    //     console.log(tmp);

    //     tmp = 123;
    //     console.log(tmp);
    // }


    // 不允许重复声明
    // function func() {
    //     let a = 10;
    //     let a = 1;  //Uncaught SyntaxError: Identifier 'a' has already been declared
    // }
    
    
    </script>
</body>
</html>